package com.frank.code_notes.C01_array;

import cn.hutool.core.lang.Console;

/**
 * @Description 59.螺旋矩阵
 * @Author zhoujr
 * @Data 2024/11/28 17:36
 */
public class L059SpiralMatrix {

    /**
     * @Description 横行和竖行左闭右开，一圈一圈旋转
     */
    public static int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];
        int startX = 0, startY = 0;
        int loop = 1, count = 1;

        while (loop <= n / 2) {
            // 横向
            for (; startX < n - loop; startX++) {
                res[startY][startX] = count++;
            }
            // 竖向
            for (; startY < n - loop; startY++) {
                res[startY][startX] = count++;
            }
            // 横向
            for (; startX >= loop; startX--) {
                res[startY][startX] = count++;
            }
            // 竖向
            for (; startY >= loop; startY--) {
                res[startY][startX] = count++;
            }
            // 下一圈起点变更
            startX++;
            startY++;
            // 加一圈
            loop++;
        }
        // 奇数最后一个节点特殊处理
        if (n % 2 != 0) {
            res[startY][startX] = count;
        }
        return res;
    }

    public static void main(String[] args) {
        int[][] intList = generateMatrix(12);
        for (int[] i : intList) {
            Console.log(i);
        }
    }

}
